/**
 * 剑指 Offer 03. 数组中重复的数字
 * https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
 */

// /**
//  * @param {number[]} nums
//  * @return {number}
//  */
// function findRepeatNumber(nums) {
//   const map = new Array(nums.length);
//   for (let i = 0; i < nums.length; i += 1) {
//     if (map[nums[i]]) {
//       return nums[i];
//     }
//     map[nums[i]] = true;
//   }
//   return -1;
// }

/**
 * @param {any[]} arr
 * @param {number} a
 * @param {number} b
 */
function swap(arr, a, b) {
  const temp = arr[a];
  arr[a] = arr[b];
  arr[b] = temp;
}

/**
 * @param {number[]} nums
 * @return {number}
 */
function findRepeatNumber(nums) {
  for (let i = 0; i < nums.length; i += 1) {
    while (nums[i] !== i) {
      if (nums[i] === nums[nums[i]]) {
        return nums[i];
      }
      swap(nums, i, nums[i]);
    }
  }
  return -1;
}

console.log(findRepeatNumber([2, 3, 1, 0, 2, 5, 3]) === 2);
